package com.itheima.tliasmanager.aop.test2;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
@Aspect
public class MyAspect2 {


    //切入点表达式写法1：execution(方法签名定位方法)
    //1.完整版：
        // execution(public com.itheima.tliasmanager.pojo.domain.Dept  com.itheima.tliasmanager.service.impl.DeptServiceImpl.findById(Integer)) throws NullPointerExceptio
    //2.省略版：public 修饰符一般省略，异常一般省略不写：
        // execution( com.itheima.tliasmanager.pojo.domain.Dept  com.itheima.tliasmanager.service.impl.DeptServiceImpl.findById(Integer))
    //3.通配符*使用：    返回任意类型                           任意包            所有业务层实现类      任意方法    任意一个参数
        // execution(      *      com.itheima.tliasmanager.  *   .impl.     *ServiceImpl      .   *       (    *    ))
    //4.通配符..使用：                              任意包                    任意参数（没有情况）
        // execution( *  com.itheima.tliasmanager  ..  impl.DeptServiceImpl.*(   ..    ))
    //5.书写建议：包名不推荐使用.. ，范围太大，影响spring框架性能。尽量具体，能避免使用通配符就不使用
    //6.使用逻辑运算符，组合多个切入点表达式
    //@Before("execution( void  com.itheima.tliasmanager.service.DeptService.addDept(com.itheima.tliasmanager.pojo.domain.Dept)) ||" +
            //"execution( void  com.itheima.tliasmanager.service.DeptService.updateDept(com.itheima.tliasmanager.pojo.domain.Dept))")

    //切入点表达式写法2：execution(方法签名定位方法)
    //7.通过方法的上的注解，定位切入点方法
    @Before("execution(* com.itheima.tliasmanager.controller.*Controller.*(..))  &&   @annotation(com.itheima.tliasmanager.annotation.Time)")
    public void before(){
        System.out.println("切入点表达式写法："+LocalDateTime.now());
    }

}
